home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Leser 19
/
Amiga Plus Leser CD 19.iso
/
Sound
/
DelfMPEG
/
src
/
MP2.a56
< prev
next >
Wrap
Text File
|
2002-11-17
|
63KB
|
1,596 lines
;*****************************************************************************
;
; DelfMPEG - MPEG audio player for Delfina DSP
; Copyright (C) 1999-2002 Michael Henke
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
;*****************************************************************************
;Delfina object DSP56K_MP2
;memory map (for Amiga access)
;
; prog
; 0 .. init (x1=mem_mp2, x0=mem_mp2p, y1=/, y0=/)
; +2 .. decode MP2 frame (x1=mono, x0=outbuf, y1=translate, y0=jsbound)
;
; xdata
; +2048 .. inbuf (Amiga write)
;
; ydata
; 0 .. busy (Amiga read only, TRUE (NON-ZERO) if decoder is running)
; 1 .. forcemono (Amiga write)
org p:
;->prog
jmp init
;->prog+2
;*****************************************************************************
;
; **** MPEG1 layer II frame decoder ****
;
; parameters
; x1 - mono (mono: not_zero, stereo: zero)
; x0 - output buffer (mono: x: only, stereo: x: left, y: right)
; y1 - translate (for sblimit, bitalloc, quantization)
; y0 - jsbound
;
; xdata+2048 - input buffer (frame data without header, max. 1788 bytes)
;
;
; based on the mp2 player for Atari Falcon by Fredrik Noring
; Delfina DSP programming by Smack/Infect!
;
;
; (Thu 07-Oct-1999) - first beta version, mono decoding doesn't work
; (Fri 15-Oct-1999) - code cleanup+optimizing, little speedup
; (getbits loop, rsinx_rcosx table to internal mem)
; fixed mono decoding (decode_subbands bug: #>2+3)
; (Sun 28-Nov-1999) - little code optimizing and speedup
; (bfy1_loop, unscramble_loop to internal mem)
; (Sun 09-Jan-2000) - subband synthesis routine optimized
; (little speedup, slightly shorter code, now it needs
; about 24% DSP time on my Delfina1200 for 44.1kHz)
; (Wed 16-Feb-2000) - fixed the 'low-bitrate bug'
; - playback quality slightly improved
; (fixed the little known 'intermediate ZERO-bitalloc bug')
; - added DSP overload detection (y:busy)
; (Mon 03-Apr-2000) - added FORCEMONO feature (only left channel is decoded)
; (Wed 26-Apr-2000) - optimized synthesis routine (significant speedup!)
; (Tue 29-Oct-2002) - synthesis: corrected output level
;
;*****************************************************************************
move x0,x:synth_out_p ;store output pointer
tfr x1,a #>1,x0 ;a=mono
tst a #>2,a
tne x0,a
move a,x:channels ;store channels
move a,y:busy ;set BUSY to non-zero
move y1,n0 ;translate
move #table_translate_sblimit,r0
move y1,x:translate
move y0,x:jsbound ;store jsbound
move y:(r0+n0),y1
move #table_translate_alloc,r0
move y1,x:sblimit
move y:(r0+n0),y1
move #table_translate_quantizations,r0
move y1,x:decoder_nbals
move y:(r0+n0),y1
move y1,x:decoder_quantizations
; ** compute audio buffer modifiers
move #>$7ff,x0
move #>128,x1
;; move x:channels,b
;>>> forcemono
move #>1,y0
move y:forcemono,a
tst a x:channels,b
tne y0,b
;<<<
move #>2,y0
move #>$3ff,a
cmp y0,b #>64,b
teq x0,a
teq x1,b
move a,x:synth_audio_mask
move b,x:synth_audio_delta
; ** calculate deltas for the cosine transform
move x:channels,a
lsl a a,y0
add y0,a
move a,x:synth_imfct_delta
; ** clear fraction
clr a #decoder_fraction,r0
;rep #2*32*3
do #2*32*3,clear_loop
move a1,x:(r0)+
clear_loop
; ** reset getbits
move #getbits_temp,r0
move #inbuf,x0
move x0,x:getbits_stream_p
move #$800000,a1
move a1,x:(r0) ;initialize 'current bitstream word'
;******************************************************************
;decode_scales
; ** getbits_init
move x:getbits_stream_p,r7
move #getbits_temp,r6
move x:decoder_getbits_loop_p,r5
; **
; ** fetch bit allocation table
; **
clr b x:channels,y0
move x:jsbound,y1
move x:decoder_nbals,r0
move #decoder_bitalloc,r1
; ** loop until jsbound
move y:(r0)+,n7 ; nbal
move #>1,x1
do y1,sb_loop0 ;jsbound
do y0,ch_loop0 ;channels
clr a b,x0 ;save b
move x:(r6),b1 ;current bitstream word
jsr (r5) ;-getbits- read nbal bits
tfr x0,b b1,x:(r6) ;restore b
add x1,b a,x:(r1)+ ;b=b+1
ch_loop0
move y:(r0)+,n7 ; nbal
sb_loop0
; ** loop until sblimit (for joint-stereo only)
move x:sblimit,a
sub y1,a b,y0
jle sb_loop1 ; not joint-stereo
do a,sb_loop1 ;sblimit-jsbound
clr a b,x0 ;save b
move x:(r6),b1 ;current bitstream word
jsr (r5) ;-getbits- read nbal bits
tfr x0,b b1,x:(r6) ;restore b
add x1,b a,x:(r1)+
add x1,b y:(r0)+,n7 ; nbal
move a,x:(r1)+ b,y0 ;b=b+2
sb_loop1
move x:(r6),b1 ;current bitstream word
; **
; ** fetch scalefactor selection information
; **
move #decoder_scfsi,r0
move #decoder_bitalloc,r4
move r4,r3
move #2,n7 ; 2 bit scfsi
do y0,sf_loop0 ;sblimit*channels
move x:(r3)+,a ;check bitalloc
tst a #0,a
jsne (r5) ;-getbits-
move a,x:(r0)+
sf_loop0
; **
; ** fetch scale factors
; **
move #decoder_scfsi,r0
move #decoder_scalefactor,r1
move #6,n7 ; 6 bit scalefactors
do y0,sf_loop1 ;sblimit*channels
clr a x:(r4)+,x0 ;check bitalloc
cmp x0,a x:(r0)+,x0
jeq sf_ba0
cmp x0,a #>1,a
jne sf_c1
clr a
jsr (r5) ;-getbits- all three
clr a a,x:(r1)+
jsr (r5) ;-getbits-
clr a a,x:(r1)+
jsr (r5) ;-getbits-
jmp sf_resume
sf_c1 cmp x0,a #>2,a
jne sf_c2
clr a
jsr (r5) ;-getbits- 1 + 3
move a,x:(r1)+
clr a a,x:(r1)+
jsr (r5) ;-getbits-
jmp sf_resume
sf_c2 cmp x0,a #0,a
jne sf_c3
jsr (r5) ;-getbits- just one
sf_ba0 move a,x:(r1)+
move a,x:(r1)+
jmp sf_resume
sf_c3 jsr (r5) ;-getbits- 1 + 2
clr a a,x:(r1)+
jsr (r5) ;-getbits-
move a,x:(r1)+
sf_resume
move a,x:(r1)+
sf_loop1
move b1,x:(r6)
; ** getbits_exit
move r7,x:getbits_stream_p
move #>decoder_scalefactor+0,x0
move x0,x:decoder_sf_granule
move #>decode_return00,x0
jmp decode_samples ;avoid stack overflow!
decode_return00
move #>decode_return01,x0
jmp decode_samples ;avoid stack overflow!
decode_return01
move #>decode_return02,x0
jmp decode_samples ;avoid stack overflow!
decode_return02
move #>decode_return03,x0
jmp decode_samples ;avoid stack overflow!
decode_return03
move #>decoder_scalefactor+1,x0
move x0,x:decoder_sf_granule
move #>decode_return10,x0
jmp decode_samples ;avoid stack overflow!
decode_return10
move #>decode_return11,x0
jmp decode_samples ;avoid stack overflow!
decode_return11
move #>decode_return12,x0
jmp decode_samples ;avoid stack overflow!
decode_return12
move #>decode_return13,x0
jmp decode_samples ;avoid stack overflow!
decode_return13
move #>decoder_scalefactor+2,x0
move x0,x:decoder_sf_granule
move #>decode_return20,x0
jmp decode_samples ;avoid stack overflow!
decode_return20
move #>decode_return21,x0
jmp decode_samples ;avoid stack overflow!
decode_return21
move #>decode_return22,x0
jmp decode_samples ;avoid stack overflow!
decode_return22
move #>decode_return23,x0
jmp decode_samples ;avoid stack overflow!
decode_return23
; do #500,overload0
; do #1000,overload1
; nop
;overload1
; nop
;overload0
;exit
move #0,x0
move x0,y:busy ;clear BUSY
rts
;******************************************************************
decode_samples
move x0,x:decode_rts_p
; ** getbits_init
move x:getbits_stream_p,r7
move #getbits_temp,r6
move x:decoder_getbits_loop_p,r5
move #decoder_bitalloc,r0
move #decoder_fraction,r1
move #2,n1
move x:decoder_quantizations,r2
move #16,n2
move x:jsbound,a
lsl a x:decoder_sf_granule,x0
move x0,x:decoder_sfp
move a,x:decoder_joint_countdown
; **
; ** read+decode samples from bitstream
; **
move x:sblimit,x0
move x0,x:decode_ds_sblimit_count
ds_sb_loop_head
move x:decode_ds_sblimit_count,a
move #>1,x0
sub x0,a x:channels,x0
jmi ds_sb_loop ;'low-bitrate bug' - jeq
move a,x:decode_ds_sblimit_count
do x0,ds_ch_loop ;channels
; ** update joint-stereo counter and check bitalloc
move #>1,x0
move x:decoder_joint_countdown,b
sub x0,b x:(r0)+,a
tst a b,x:decoder_joint_countdown
jne ds_samples
; ** fill with zeroes
move a,x:(r1)+
move a,x:(r1)+
move a,x:(r1)-n1
jmp ds_scalefactor_adjust
ds_samples
; ** check if joint-stereo applies
move x:decoder_old_samples_p,r4
jclr #23,b1,ds_no_joint
jset #0,b1,ds_no_joint
; ** copy old samples for joint-stereo
move y:(r4)+,a
move a,x:(r1)+ y:(r4)+,a
move a,x:(r1)+ y:(r4),a
move a,x:(r1)-n1
jmp ds_scalefactor_adjust
ds_no_joint
; ** decode samples
move a,n2
move #table_bits,r3
move y:(r2+n2),n3 ; quantization
move #16,n2
move y:(r3+n3),n7 ; bits
clr a n3,y0
cmp y0,a #>1,a
jeq ds_fetch_grouping
cmp y0,a #>3,a
jeq ds_fetch_grouping
cmp y0,a n3,a
jeq ds_fetch_grouping
; ** no grouping, fetch triplet
lsl a x:(r6),b1 ;current bitstream word
lsl a x:decoder_table_xmdc_p,r3
clr a a,n3
jsr (r5) ;-getbits-
move b1,x:(r6)
move (r3)+n3
move #3,n3
; ** remove greatest bit and check
; ** if the accumulator should be 0.0 or -1.0
clr b a,x1 y:(r3)+,y0 ; x
and y0,a #-0.5,y1
cmp x1,a a,x1 y:(r3)+,y0 ; m
teq y1,b
; ** add constant `d', multiply with
; ** the inverse, thus normalize sample,
; ** and multiply with the constant `c'
mpy y0,x1,a y:(r3)+,y0 ; d
add y0,b a0,y1
add y1,b y:(r3)-n3,y0 ; c
move b,y1
macr y0,y1,b ; remember that c is subtracted by 1.0!
move b,x:(r1)+
clr a x:(r6),b1 ;current bitstream word
jsr (r5) ;-getbits-
move b1,x:(r6)
; ** remove greatest bit and check
; ** if the accumulator should be 0.0 or -1.0
clr b a,x1 y:(r3)+,y0 ; x
and y0,a #-0.5,y1
cmp x1,a a,x1 y:(r3)+,y0 ; m
teq y1,b
; ** add constant `d', multiply with
; ** the inverse, thus normalize sample,
; ** and multiply with the constant `c'
mpy y0,x1,a y:(r3)+,y0 ; d
add y0,b a0,y1
add y1,b y:(r3)-n3,y0 ; c
move b,y1
macr y0,y1,b ; remember that c is subtracted by 1.0!
move b,x:(r1)+
clr a x:(r6),b1 ;current bitstream word
jsr (r5) ;-getbits-
move b1,x:(r6)
; ** remove greatest bit and check
; ** if the accumulator should be 0.0 or -1.0
clr b a,x1 y:(r3)+,y0 ; x
and y0,a #-0.5,y1
cmp x1,a a,x1 y:(r3)+,y0 ; m
teq y1,b
; ** add constant `d', multiply with
; ** the inverse, thus normalize sample,
; ** and multiply with the constant `c'
mpy y0,x1,a y:(r3)+,y0 ; d
add y0,b a0,y1
add y1,b y:(r3)-n3,y0 ; c
move b,y1
macr y0,y1,b ; remember that c is subtracted by 1.0!
move b,x:(r1)-n1
jmp ds_scalefactor_adjust
ds_fetch_grouping
; ** fetch grouped triplet
move #table_grouping,r3
clr a x:(r6),b1 ;current bitstream word
jsr (r5) ;-getbits-
lsl a a,x0
add x0,a y:(r3+n3),r4
move a,n4
move b1,x:(r6)
move (r4)+n4
move y:(r4)+,a
move a,x:(r1)+ y:(r4)+,a
move a,x:(r1)+ y:(r4),a
move a,x:(r1)-n1
ds_scalefactor_adjust
; ** multiply samples with the
; ** corresponding scalefactors
move x:decoder_sfp,r3
move #3,n3
move x:decoder_old_samples_p,r4
move x:(r3)+n3,n3
move r3,x:decoder_sfp
move #table_multiple,r3
move x:(r1)+,x0
tfr x0,a y:(r3+n3),y1
mpyr x0,y1,b x:(r1)-,x0 a,y:(r4)+ ;old samples
mpyr x0,y1,a b,x:(r1)+n1 x0,b
move x:(r1)-,x0 b,y:(r4)+ ;old samples
mpyr x0,y1,b a,x:(r1)+ x0,a
move b,x:(r1)+ a,y:(r4) ;old samples
ds_ch_loop
move (r2)+n2 ; update next to quantization
jmp ds_sb_loop_head
ds_sb_loop
; ** getbits_exit
move r7,x:getbits_stream_p
; move x:decode_rts_p,r0
; nop
; jmp (r0) ;'rts'-replacement
;******************************************************************
;subband synthesis
move #>decoder_fraction,x0
move x0,x:synth_imfct_fraction_p
move #3,n0
move n0,x:decode_tr3_count
synth_tr_loop_head
move x:synth_imfct_fraction_p,r0
move x:synth_pcm64_p,x0
move x0,x:synth_pcm_p
;; move x:channels,b ;1 or 2
;>>> forcemono
move #<0,x0 ;#>1,x0
move y:forcemono,a
tst a x:channels,b
tne x0,b
;<<<
synth_ch_loop_head
lsr b x:synth_imfct_p,n7 ;x:synth_imfct_p !! n7
move b,x:decode_channels_count ;0 or 1
; **
; ** perform inverse modified fast cosine transform
; **
; ** first butterfly pass
move x:synth_imfct_delta,n0
move n7,r1 ;x:synth_imfct_p
move n7,r5
move #0.70710678,y0 ;cos(pi/4)
move x:(r0)+n0,x0
do #8,synth_bfy1
mpyr x0,y0,a x:(r0)+n0,x0
mpyr -x0,y0,a a,x:(r1)+ a,y:(r5)+
move a,x:(r1)+
mpyr x0,y0,a x:(r0)+n0,x0
mpyr -x0,y0,a x:(r0)+n0,x0 a,y:(r5)+
mpyr x0,y0,a a,x:(r1)+ a,y:(r5)+
mpyr -x0,y0,a a,x:(r1)+
move x:(r0)+n0,x0 a,y:(r5)+
synth_bfy1
; ** second butterfly pass
move n7,a ;x:synth_imfct_p
move #>16,x0
add x0,a a,r0
add x0,a a,r4
add x0,a a,r6
move a,r5
lua (r0)+,r7
move x:(r0),b y:(r4),y0
do #16,synth_bfy2
add y0,b x:(r4),x1 y:(r0),a
sub x1,a b,x:(r5) y:(r0),b
add x1,b x:(r0),a a,y:(r5)+
sub y0,a x:(r0),b b,y:(r6)
sub x1,b a,x:(r6)+ y:(r0),a
sub y0,a b,x:(r4) y:(r0),b
add y0,b x:(r0),a a,y:(r4)+
add x1,a x:(r7)+,b b,y:(r0) ;!b
move a,x:(r0)+ y:(r4),y0 ;!y0
synth_bfy2
; ** perform the rest of the butterfly passes
move x:synth_tab_rsincosx_p,n6 ;x:synth_tab_rsincosx_p !! n6
move n7,r0 ;x:synth_imfct_p
movec #<64-1,m0 ;modulo-64 addressing
movec #<64-1,m4 ;modulo-64 addressing
; ** pass 3
move n6,r6 ;x:synth_tab_rsincosx_p
move #<8,n0
move #<8,n4
move r0,r4
do #4,synth_grp3
lua (r0)+n0,r5
move r5,r2
move x:(r6),x0
move x:(r0),b y:(r5),y1
mac -x0,y1,b x:(r2)+,x1 y:(r6)+,y0
do #8,synth_bfy3
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+,b
mac y0,y1,b a,x:(r5) y:(r2),y1
macr x0,x1,b y:(r0),a
subl b,a x:(r4),b b,y:(r0)+
mac -x0,y1,b x:(r2)+,x1 a,y:(r5)+
synth_bfy3
move x:(r0)+n0,x0 y:(r4)+n4,y0 ;update r0, r4
synth_grp3
movec #<64-1,m2 ;modulo-64 addressing
movec #<64-1,m5 ;modulo-64 addressing
; ** pass 4
move n6,r6 ;x:synth_tab_rsincosx_p
move #<4+0,n0
move #<4+1,n2
move #<4+1,n4
move #<4+1,n5
lua (r0)+n0,r5
move r5,r2
move x:(r6),x0
move x:(r0),b y:(r5),y1
do #8,synth_grp4
mac -x0,y1,b x:(r2)+,x1 y:(r6)+,y0
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+,b
mac y0,y1,b a,x:(r5) y:(r2),y1
macr x0,x1,b y:(r0),a
subl b,a x:(r4),b b,y:(r0)+
mac -x0,y1,b x:(r2)+,x1 a,y:(r5)+
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+,b
mac y0,y1,b a,x:(r5) y:(r2),y1
macr x0,x1,b y:(r0),a
subl b,a x:(r4),b b,y:(r0)+
mac -x0,y1,b x:(r2)+,x1 a,y:(r5)+
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+,b
mac y0,y1,b a,x:(r5) y:(r2),y1
macr x0,x1,b y:(r0),a
subl b,a x:(r4),b b,y:(r0)+
mac -x0,y1,b x:(r2)+n2,x1 a,y:(r5)+ ;update r2
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+n4,b ;update r4
mac y0,y1,b a,x:(r5) y:(r2),y1 ;!y1
macr x0,x1,b x:(r6),x0 y:(r0),a ;!x0
subl b,a x:(r4),b b,y:(r0)+ ;!b
move x:(r0)+n0,a a,y:(r5)+n5 ;update r0, r5
synth_grp4
; ** pass 5
move n6,r6 ;x:synth_tab_rsincosx_p
move #<2+0,n0
move #<2+1,n2
move #<2+1,n4
move #<2+1,n5
lua (r0)+n0,r5
move r5,r2
move x:(r6),x0
move x:(r0),b y:(r5),y1
do #16,synth_grp5
mac -x0,y1,b x:(r2)+,x1 y:(r6)+,y0
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+,b
mac y0,y1,b a,x:(r5) y:(r2),y1
macr x0,x1,b y:(r0),a
subl b,a x:(r4),b b,y:(r0)+
mac -x0,y1,b x:(r2)+n2,x1 a,y:(r5)+ ;update r2
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+n4,b ;update r4
mac y0,y1,b a,x:(r5) y:(r2),y1 ;!y1
macr x0,x1,b x:(r6),x0 y:(r0),a ;!x0
subl b,a x:(r4),b b,y:(r0)+ ;!b
move x:(r0)+n0,a a,y:(r5)+n5 ;update r0, r5
synth_grp5
ori #$08,mr ;SCALE UP mode
; ** pass 6
move n6,r6 ;x:synth_tab_rsincosx_p
move #<1+1,n2
move #<1+1,n4
move #<1+1,n5
lua (r0)+,r5
move r5,r2
move x:(r6),x0
move x:(r0),b y:(r5),y1
do #32,synth_grp6
mac -x0,y1,b x:(r2)+n2,x1 y:(r6)+,y0 ;update r2
macr y0,x1,b x:(r0),a
subl b,a b,x:(r0) y:(r4)+n4,b ;update r4
mac y0,y1,b a,x:(r5) y:(r2),y1 ;!y1
macr x0,x1,b x:(r6),x0 y:(r0),a ;!x0
subl b,a x:(r4),b b,y:(r0)+ ;!b
move x:(r0)+,a a,y:(r5)+n5 ;update r0, r5
synth_grp6
movec m7,m2 ;linear addressing
movec m7,m4 ;linear addressing
movec m7,m5 ;linear addressing
; ** unscrambling and final adjustments
move x:synth_audio_p,r5
move #>synth_tab_cosx,r4
move #>synth_tab_sinx,r6
movec #<0,m0 ;bit-reverse addressing
move #<32,n0
move x:(r0),x1 y:(r4)+,y1
mpy y1,x1,a y:(r6)+,y0
move y:(r0)+n0,y1
macr -y0,y1,a x:(r0),x1 y:(r4)+,y1
move y:(r6)+,y0
synth_unscramble_start
;------ move #synth_unscramble,r7
;------ jmp <synth_unscramble_start
do #64-1,synth_unscramble
mpy y1,x1,a a,x:(r5)+ y:(r0)+n0,y1
macr -y0,y1,a x:(r0),x1 y:(r4)+,y1
move y:(r6)+,y0
synth_unscramble
;------ 5+1 words, return: jmp (r7)
move a,x:(r5)+
andi #$f3,mr ;NO SCALING mode
; ** window audio data
move x:synth_audio_p,r0
movec x:synth_audio_mask,m0 ;modulo addressing
movec m0,m1
move x:synth_audio_delta,a
tfr a,b #>32,x0
add x0,a x:synth_pcm_p,r5
move a,n0
lsl b #synth_tab_window,r4
lua (r0)+n0,r1
move x:synth_window_p,r3
move b1,n0
move b1,n1
ori #$08,mr ;SCALE UP mode
jsr (r3)
andi #$f3,mr ;NO SCALING mode
move r5,x:synth_pcm_p
movec m7,m0 ;linear addressing
movec m0,m1
; ** update pointer to next channel
move #>3,x0
move x:synth_imfct_fraction_p,a
add x0,a #>64,y0
move a,r0
move x:synth_audio_p,a
add y0,a x:decode_channels_count,b
tst b a,x:synth_audio_p
jne synth_ch_loop_head
; ** finally: write audio data to output buffer
move x:synth_out_p,r4
move x:synth_pcm64_p,r0
move #<31,n0
do #32,synth_out_loop
move x:(r0)+,x1
move x:(r0+n0),x0
move x,l:(r4)+
synth_out_loop
move r4,x:synth_out_p
; ** fraction pointer to next triplet
; ** and update audio buffer pointers
move x:synth_imfct_fraction_p,a
move #>1,x0
move x:synth_audio_p,r0
add x0,a x:synth_audio_delta,n0
move a,x:synth_imfct_fraction_p
move (r0)-n0
movec x:synth_audio_mask,m0
move x:decode_tr3_count,a
sub x0,a (r0)-n0
move a,x:decode_tr3_count
movec #$ffff,m0
tst a r0,x:synth_audio_p
jne synth_tr_loop_head
move x:decode_rts_p,r0
nop
jmp (r0) ;'rts'-replacement
synth_window_start
do #32,synth_window
move x:(r0)+n0,x0 y:(r4)+,y0
mpy x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
mac x0,y0,a x:(r0)+n0,x0 y:(r4)+,y0
mac x0,y0,a x:(r1)+n1,x0 y:(r4)+,y0
macr x0,y0,a (r0)+
move a,x:(r5)+ y:(r1)+,a ;update r1
synth_window
rts
synth_window_end
; ** 21 words
synth_bfy1_help
jmp (r7)
move #synth_bfy1,r7
synth_unscramble_help
jmp (r7)
move #synth_unscramble,r7
getbits_loop_start
do n7,getbits_loop
lsl b ;b1=b1<<1 (new CARRY bit)
jne getbits_ne ;(patch for short jump)
getbits_cp
move x:(r7)+,b1 ;fetch next 24 bits
rol b ;b1=b1<<1, append end marker
getbits_ne
rol a ;get CARRY bit, set condition code ZERO
getbits_loop
rts
getbits_loop_end
; ** 9 words (8 words with 'jne' short jump)
;*** initialize ************************
; parameters
; x1 - mem_mp2 (64+32=96 words in INTERNAL L-memory)
; x0 - mem_mp2p (21+6=27 words in INTERNAL P-memory)
; y1 - /
; y0 - /
init
;********* subband synthesis: fast L-data buffer for IMFCT routine
;********* (64 words - major speedup!!)
tfr x1,a #>64,x1
tst a #synth_tab_rsinxrcosx,r0
jeq init_no_lmem
add x1,a a,x:synth_imfct_p
;********* subband synthesis: rsinx_rcosx table to fast L-data memory
;********* (32 words - little speedup)
move a,x:synth_tab_rsincosx_p
move a,r4
move x:(r0),a
do #32,init_loop0
move a,x:(r4) y:(r0)+,a
move x:(r0),a a,y:(r4)+
init_loop0
init_no_lmem
tfr x0,a #synth_window_start,r0
tst a x0,r1
jeq init_no_pmem
;********* subband synthesis: window loop to fast program memory
;********* (21 words - major speedup!!)
move x0,x:synth_window_p
lua (r1)+,r2
do #synth_window_end-synth_window_start,init_loop1
movem p:(r0)+,x1
movem x1,p:(r1)+
init_loop1
tfr x0,a #>synth_window-synth_window_start-1,x0
add x0,a #>synth_unscramble_start,r0
movem a,p:(r2) ;patch absolute address in 'do'
;********* subband synthesis: unscramble loop to fast program memory
;********* (6 words - tiny speedup)
move r1,a
tfr a,b r0,r2
movem p:(r0)+,x1
movem x1,p:(r1)+ ;copy first word of 'do'
move #>synth_unscramble-synth_unscramble_start-1,x0
add x0,a (r0)+
movem a,p:(r1)+ ;second word of 'do' (absolute address)
do #synth_unscramble-synth_unscramble_start-2,init_loop_p1
movem p:(r0)+,x1
movem x1,p:(r1)+ ;copy the rest
init_loop_p1
move #>synth_unscramble_help,r3
move #>$0c0000,y0 ;short jump 'jmp xxx'
movem p:(r3)+,x1
movem x1,p:(r1)+ ;copy 'jmp (r7)'
movem p:(r3)+,x1
movem x1,p:(r2)+
movem p:(r3),x1
movem x1,p:(r2)+ ;copy 'move #synth_unscramble,r7'
or y0,b
movem b,p:(r2) ;short jump 'jmp <synth_unscramble_start'
init_no_pmem
rts
org l:
align 64
synth_imfct_slow
ds 64
synth_tab_rsinxrcosx
; ** x:rsinx y:rcosx
dcl 0.000000, 0.999999
dcl 0.999999, 0.000000
dcl 0.707107, 0.707107
dcl 0.707107, -0.707107
dcl 0.382683, 0.923880
dcl 0.923880, -0.382683
dcl 0.923880, 0.382683
dcl 0.382683, -0.923880
dcl 0.195090, 0.980785
dcl 0.980785, -0.195090
dcl 0.831470, 0.555570
dcl 0.555570, -0.831470
dcl 0.555570, 0.831470
dcl 0.831470, -0.555570
dcl 0.980785, 0.195090
dcl 0.195090, -0.980785
dcl 0.098017, 0.995185
dcl 0.995185, -0.098017
dcl 0.773010, 0.634393
dcl 0.634393, -0.773010
dcl 0.471397, 0.881921
dcl 0.881921, -0.471397
dcl 0.956940, 0.290285
dcl 0.290285, -0.956940
dcl 0.290285, 0.956940
dcl 0.956940, -0.290285
dcl 0.881921, 0.471397
dcl 0.471397, -0.881921
dcl 0.634393, 0.773010
dcl 0.773010, -0.634393
dcl 0.995185, 0.098017
dcl 0.098017, -0.995185
decoder_old_samples_slow
ds 3
;;vars
org x:
align 2048
synth_audio ds 2048
;->xdata+2048
inbuf ds 596 ;MPG_MAXFRAMESIZE=1792-4
channels ds 1
translate ds 1
sblimit ds 1
jsbound ds 1
getbits_stream_p ds 1
getbits_temp ds 1
decoder_getbits_loop_p dc getbits_loop_start
decode_rts_p ds 1
decode_ds_sblimit_count ds 1
decode_tr3_count ds 1
decode_channels_count ds 1
; dc "######bitalloc ######"
decoder_bitalloc ds 2*32
; dc "######scfsi ######"
decoder_scfsi ds 2*32
; dc "######scalefact######"
decoder_scalefactor ds 2*32*3
; dc "######fraction ######"
decoder_fraction ds 2*32*3
; dc "######"
decoder_old_samples_p dc decoder_old_samples_slow
decoder_table_xmdc_p dc table_xmdc
decoder_sfp ds 1
decoder_sf_granule ds 1
decoder_quantizations ds 1
decoder_nbals ds 1
decoder_joint_countdown ds 1
synth_out_p ds 1
synth_audio_p dc synth_audio
synth_audio_mask ds 1
synth_audio_delta ds 1
synth_pcm_p ds 1
synth_imfct_p dc synth_imfct_slow
synth_window_p dc synth_window_start
synth_tab_rsincosx_p dc synth_tab_rsinxrcosx
synth_imfct_fraction_p ds 1
synth_imfct_delta ds 1
synth_pcm64_p dc synth_pcm64_slow
synth_pcm64_slow ds 64
org y:
busy dc 0
forcemono dc 0
synth_tab_window
dc $000000,$fff8c1,$003540,$ff8d41,$01fd40,$faf7c1,$066b80,$db63c1
dc $494780,$249c40,$066b80,$050840,$01fd40,$0072c0,$003540,$000740
dc $ffffc1,$fff841,$003680,$ff7e41,$01f400,$fa9cc1,$05d1c0,$d99601
dc $493c00,$22ce00,$06f780,$04ad00,$0203c0,$006440,$003400,$000680
dc $ffffc1,$fff741,$003780,$ff6ec1,$01e800,$fa4241,$052a00,$d7ca01
dc $491a00,$20ffc0,$077600,$045240,$020800,$0056c0,$003280,$000600
dc $ffffc1,$fff681,$003840,$ff5ec1,$01d940,$f9e8c1,$047440,$d60081
dc $48e180,$1f32c0,$07e700,$03f7c0,$0209c0,$004980,$003100,$000540
dc $ffffc1,$fff5c1,$0038c0,$ff4e41,$01c780,$f990c1,$03b000,$d43ac1
dc $489240,$1d6800,$084b00,$039e40,$020940,$003d00,$002f80,$0004c0
dc $ffffc1,$fff4c1,$003900,$ff3d41,$01b2c0,$f93a41,$02ddc0,$d279c1
dc $482d00,$1ba040,$08a200,$0345c0,$0206c0,$003140,$002dc0,$000440
dc $ffffc1,$fff3c1,$003900,$ff2c01,$019b00,$f8e641,$01fd40,$d0be81
dc $47b1c0,$19dc80,$08ecc0,$02ef00,$020240,$002640,$002c00,$000400
dc $ffff81,$fff2c1,$0038c0,$ff1a41,$017fc0,$f894c1,$010e80,$cf09c1
dc $4720c0,$181d80,$092b40,$0299c0,$01fc00,$001bc0,$002a40,$000380
dc $ffff81,$fff181,$003800,$ff0841,$016180,$f84681,$001180,$cd5cc1
dc $467a40,$166440,$095e00,$024680,$01f440,$001200,$002840,$000340
dc $ffff81,$fff041,$003740,$fef601,$014000,$f7fbc1,$ff0681,$cbb881
dc $45bf00,$14b140,$098580,$01f580,$01ea80,$000900,$002680,$0002c0
dc $ffff81,$ffef01,$0035c0,$fee3c1,$011ac0,$f7b541,$fded81,$ca1d81
dc $44ef80,$130580,$09a1c0,$01a700,$01dfc0,$000080,$0024c0,$000280
dc $ffff41,$ffedc1,$003400,$fed181,$00f280,$f77341,$fcc701,$c88d81
dc $440bc0,$1161c0,$09b3c0,$015b00,$01d380,$fff8c1,$0022c0,$000240
dc $ffff41,$ffec41,$003200,$febf41,$00c680,$f73681,$fb92c1,$c708c1
dc $431500,$0fc6c0,$09bb80,$0111c0,$01c640,$fff1c1,$002100,$000200
dc $ffff01,$ffeac1,$002f40,$fead01,$009740,$f6ff41,$fa5181,$c59081
dc $420b40,$0e3500,$09b9c0,$00cb80,$01b7c0,$ffeb41,$001f40,$0001c0
dc $ffff01,$ffe941,$002c40,$fe9b01,$006480,$f6ce01,$f90381,$c425c1
dc $40ef80,$0cad00,$09af00,$008840,$01a880,$ffe581,$001d40,$0001c0
dc $fffec1,$ffe7c1,$0028c0,$fe8981,$002e40,$f6a3c1,$f7a901,$c2c901
dc $3fc280,$0b2fc0,$099b80,$004800,$019880,$ffe041,$001bc0,$000180
dc $fffec1,$ffe601,$002480,$fe7841,$fff4c1,$f68041,$f64241,$c17b41
dc $3e84c0,$09bdc0,$097fc0,$000b40,$0187c0,$ffdb81,$001a00,$000140
dc $fffe81,$ffe441,$001fc0,$fe6781,$ffb801,$f66481,$f4d041,$c03d81
dc $3d3700,$085700,$095c40,$ffd1c1,$017680,$ffd741,$001840,$000140
dc $fffe41,$ffe2c1,$001a80,$fe5781,$ff77c1,$f65101,$f35301,$bf1081
dc $3bda40,$06fc80,$093200,$ff9b81,$016500,$ffd3c1,$0016c0,$000100
dc $fffe41,$ffe0c1,$0014c0,$fe4841,$ff3481,$f64641,$f1cb01,$bdf4c1
dc $3a6f80,$05ae80,$0900c0,$ff68c1,$015300,$ffd0c1,$001540,$000100
dc $fffe01,$ffdf01,$000e40,$fe39c1,$feee41,$f64481,$f03941,$bceb01
dc $38f740,$046d40,$08c980,$ff3981,$0140c0,$ffce01,$0013c0,$0000c0
dc $fffdc1,$ffdd41,$000740,$fe2c81,$fea501,$f64c41,$ee9e41,$bbf441
dc $377280,$033900,$088cc0,$ff0d81,$012e80,$ffcc01,$001240,$0000c0
dc $fffd81,$ffdb41,$ffff81,$fe2041,$fe5901,$f65e41,$ecfa81,$bb1081
dc $35e280,$021280,$084ac0,$fee541,$011c40,$ffca41,$001100,$000080
dc $fffd41,$ffd981,$fff701,$fe1581,$fe0a81,$f67a81,$eb4ec1,$ba4101
dc $344780,$00f980,$080440,$fec001,$010a00,$ffc8c1,$000fc0,$000080
dc $fffcc1,$ffd7c1,$ffee01,$fe0bc1,$fdb981,$f6a201,$e99bc1,$b985c1
dc $32a340,$ffee81,$07b980,$fe9e81,$00f7c0,$ffc801,$000e80,$000080
dc $fffc81,$ffd5c1,$ffe441,$fe0401,$fd6641,$f6d4c1,$e7e281,$b8df41
dc $30f640,$fef181,$076b40,$fe8041,$00e5c0,$ffc741,$000d40,$000080
dc $fffc01,$ffd401,$ffd9c1,$fdfdc1,$fd1101,$f71341,$e62381,$b84e41
dc $2f4180,$fe02c1,$0719c0,$fe6501,$00d400,$ffc701,$000c40,$000040
dc $fffbc1,$ffd241,$ffcec1,$fdf941,$fcba41,$f75e01,$e45fc1,$b7d301
dc $2d8640,$fd2241,$06c5c0,$fe4d41,$00c2c0,$ffc701,$000b40,$000040
dc $fffb41,$ffd081,$ffc301,$fdf6c1,$fc61c1,$f7b501,$e29801,$b76dc1
dc $2bc540,$fc5001,$066f40,$fe3881,$00b1c0,$ffc741,$000a40,$000040
dc $fffac1,$ffcf01,$ffb681,$fdf641,$fc0841,$f81901,$e0cd41,$b71e81
dc $29ff80,$fb8bc1,$061740,$fe26c1,$00a140,$ffc7c1,$000980,$000040
dc $fffa01,$ffcd81,$ffa941,$fdf801,$fbadc1,$f88a01,$df0041,$b6e601
dc $283600,$fad601,$05bdc0,$fe1801,$009140,$ffc881,$0008c0,$000040
dc $fff981,$ffcc01,$ff9bc1,$fdfc41,$fb5301,$f90881,$dd3201,$b6c401
dc $266a00,$fa2e41,$056340,$fe0c01,$0081c0,$ffc981,$0007c0,$000040
synth_tab_sinx
dc 0.000000,0.049068,0.098017,0.146730 ;sine only
dc 0.195090,0.242980,0.290285,0.336890
dc 0.382683,0.427555,0.471397,0.514103
dc 0.555570,0.595699,0.634393,0.671559
dc 0.707107,0.740951,0.773010,0.803208
dc 0.831470,0.857729,0.881921,0.903989
dc 0.923880,0.941544,0.956940,0.970031
dc 0.980785,0.989177,0.995185,0.998795
synth_tab_cosx
dc 0.999999,0.998795,0.995185,0.989177 ;sine and cosine
dc 0.980785,0.970031,0.956940,0.941544
dc 0.923880,0.903989,0.881921,0.857729
dc 0.831470,0.803208,0.773010,0.740951
dc 0.707107,0.671559,0.634393,0.595699
dc 0.555570,0.514103,0.471397,0.427555
dc 0.382683,0.336890,0.290285,0.242980
dc 0.195090,0.146730,0.098017,0.049068
dc 0.000000,-0.049068,-0.098017,-0.146730 ;cosine only
dc -0.195090,-0.242980,-0.290285,-0.336890
dc -0.382683,-0.427555,-0.471397,-0.514103
dc -0.555570,-0.595699,-0.634393,-0.671559
dc -0.707107,-0.740951,-0.773010,-0.803208
dc -0.831470,-0.857729,-0.881921,-0.903989
dc -0.923880,-0.941544,-0.956940,-0.970031
dc -0.980785,-0.989177,-0.995185,-0.998795
;; Sampling grouping tables.
table_grouping
dc table_quantization_group_0
dc table_quantization_group_1
dc 0
dc table_quantization_group_3
table_quantization_group_0
dc $d55557,$d55557,$d55557,$000000,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$d55557,$000000,$d55557
dc $000000,$000000,$d55557,$2aaaaa,$000000,$d55557,$d55557,$2aaaaa,$d55557,$000000,$2aaaaa,$d55557
dc $2aaaaa,$2aaaaa,$d55557,$d55557,$d55557,$000000,$000000,$d55557,$000000,$2aaaaa,$d55557,$000000
dc $d55557,$000000,$000000,$000000,$000000,$000000,$2aaaaa,$000000,$000000,$d55557,$2aaaaa,$000000
dc $000000,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$000000,$d55557,$d55557,$2aaaaa,$000000,$d55557,$2aaaaa
dc $2aaaaa,$d55557,$2aaaaa,$d55557,$000000,$2aaaaa,$000000,$000000,$2aaaaa,$2aaaaa,$000000,$2aaaaa
dc $d55557,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$d55557,$d55557,$d55557
dc $000000,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$d55557,$000000,$d55557,$000000,$000000,$d55557
table_quantization_group_1
dc $ccccce,$ccccce,$ccccce,$e66668,$ccccce,$ccccce,$000000,$ccccce,$ccccce,$199999,$ccccce,$ccccce
dc $333333,$ccccce,$ccccce,$ccccce,$e66668,$ccccce,$e66668,$e66668,$ccccce,$000000,$e66668,$ccccce
dc $199999,$e66668,$ccccce,$333333,$e66668,$ccccce,$ccccce,$000000,$ccccce,$e66668,$000000,$ccccce
dc $000000,$000000,$ccccce,$199999,$000000,$ccccce,$333333,$000000,$ccccce,$ccccce,$199999,$ccccce
dc $e66668,$199999,$ccccce,$000000,$199999,$ccccce,$199999,$199999,$ccccce,$333333,$199999,$ccccce
dc $ccccce,$333333,$ccccce,$e66668,$333333,$ccccce,$000000,$333333,$ccccce,$199999,$333333,$ccccce
dc $333333,$333333,$ccccce,$ccccce,$ccccce,$e66668,$e66668,$ccccce,$e66668,$000000,$ccccce,$e66668
dc $199999,$ccccce,$e66668,$333333,$ccccce,$e66668,$ccccce,$e66668,$e66668,$e66668,$e66668,$e66668
dc $000000,$e66668,$e66668,$199999,$e66668,$e66668,$333333,$e66668,$e66668,$ccccce,$000000,$e66668
dc $e66668,$000000,$e66668,$000000,$000000,$e66668,$199999,$000000,$e66668,$333333,$000000,$e66668
dc $ccccce,$199999,$e66668,$e66668,$199999,$e66668,$000000,$199999,$e66668,$199999,$199999,$e66668
dc $333333,$199999,$e66668,$ccccce,$333333,$e66668,$e66668,$333333,$e66668,$000000,$333333,$e66668
dc $199999,$333333,$e66668,$333333,$333333,$e66668,$ccccce,$ccccce,$000000,$e66668,$ccccce,$000000
dc $000000,$ccccce,$000000,$199999,$ccccce,$000000,$333333,$ccccce,$000000,$ccccce,$e66668,$000000
dc $e66668,$e66668,$000000,$000000,$e66668,$000000,$199999,$e66668,$000000,$333333,$e66668,$000000
dc $ccccce,$000000,$000000,$e66668,$000000,$000000,$000000,$000000,$000000,$199999,$000000,$000000
dc $333333,$000000,$000000,$ccccce,$199999,$000000,$e66668,$199999,$000000,$000000,$199999,$000000
dc $199999,$199999,$000000,$333333,$199999,$000000,$ccccce,$333333,$000000,$e66668,$333333,$000000
dc $000000,$333333,$000000,$199999,$333333,$000000,$333333,$333333,$000000,$ccccce,$ccccce,$199999
dc $e66668,$ccccce,$199999,$000000,$ccccce,$199999,$199999,$ccccce,$199999,$333333,$ccccce,$199999
dc $ccccce,$e66668,$199999,$e66668,$e66668,$199999,$000000,$e66668,$199999,$199999,$e66668,$199999
dc $333333,$e66668,$199999,$ccccce,$000000,$199999,$e66668,$000000,$199999,$000000,$000000,$199999
dc $199999,$000000,$199999,$333333,$000000,$199999,$ccccce,$199999,$199999,$e66668,$199999,$199999
dc $000000,$199999,$199999,$199999,$199999,$199999,$333333,$199999,$199999,$ccccce,$333333,$199999
dc $e66668,$333333,$199999,$000000,$333333,$199999,$199999,$333333,$199999,$333333,$333333,$199999
dc $ccccce,$ccccce,$333333,$e66668,$ccccce,$333333,$000000,$ccccce,$333333,$199999,$ccccce,$333333
dc $333333,$ccccce,$333333,$ccccce,$e66668,$333333,$e66668,$e66668,$333333,$000000,$e66668,$333333
dc $199999,$e66668,$333333,$333333,$e66668,$333333,$ccccce,$000000,$333333,$e66668,$000000,$333333
dc $000000,$000000,$333333,$199999,$000000,$333333,$333333,$000000,$333333,$ccccce,$199999,$333333
dc $e66668,$199999,$333333,$000000,$199999,$333333,$199999,$199999,$333333,$333333,$199999,$333333
dc $ccccce,$333333,$333333,$e66668,$333333,$333333,$000000,$333333,$333333,$199999,$333333,$333333
dc $333333,$333333,$333333,$ccccce,$ccccce,$ccccce,$e66668,$ccccce,$ccccce,$000000,$ccccce,$ccccce
table_quantization_group_3
dc $c71c73,$c71c73,$c71c73,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$c71c73,$f1c71e,$c71c73,$c71c73
dc $000000,$c71c73,$c71c73,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$c71c73,$2aaaaa,$c71c73,$c71c73
dc $38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$d55557,$d55557,$c71c73,$e38e3a,$d55557,$c71c73
dc $f1c71e,$d55557,$c71c73,$000000,$d55557,$c71c73,$0e38e3,$d55557,$c71c73,$1c71c7,$d55557,$c71c73
dc $2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$d55557,$e38e3a,$c71c73
dc $e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$c71c73,$0e38e3,$e38e3a,$c71c73
dc $1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$c71c73,$c71c73,$f1c71e,$c71c73
dc $d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$c71c73,$000000,$f1c71e,$c71c73
dc $0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$c71c73,$38e38e,$f1c71e,$c71c73
dc $c71c73,$000000,$c71c73,$d55557,$000000,$c71c73,$e38e3a,$000000,$c71c73,$f1c71e,$000000,$c71c73
dc $000000,$000000,$c71c73,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$c71c73,$2aaaaa,$000000,$c71c73
dc $38e38e,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$c71c73,$e38e3a,$0e38e3,$c71c73
dc $f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$c71c73,$1c71c7,$0e38e3,$c71c73
dc $2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$d55557,$1c71c7,$c71c73
dc $e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$c71c73,$0e38e3,$1c71c7,$c71c73
dc $1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$c71c73,$c71c73,$2aaaaa,$c71c73
dc $d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$c71c73,$000000,$2aaaaa,$c71c73
dc $0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$c71c73,$38e38e,$2aaaaa,$c71c73
dc $c71c73,$38e38e,$c71c73,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$c71c73,$f1c71e,$38e38e,$c71c73
dc $000000,$38e38e,$c71c73,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$c71c73,$2aaaaa,$38e38e,$c71c73
dc $38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$d55557,$c71c73,$d55557,$e38e3a,$c71c73,$d55557
dc $f1c71e,$c71c73,$d55557,$000000,$c71c73,$d55557,$0e38e3,$c71c73,$d55557,$1c71c7,$c71c73,$d55557
dc $2aaaaa,$c71c73,$d55557,$38e38e,$c71c73,$d55557,$c71c73,$d55557,$d55557,$d55557,$d55557,$d55557
dc $e38e3a,$d55557,$d55557,$f1c71e,$d55557,$d55557,$000000,$d55557,$d55557,$0e38e3,$d55557,$d55557
dc $1c71c7,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$38e38e,$d55557,$d55557,$c71c73,$e38e3a,$d55557
dc $d55557,$e38e3a,$d55557,$e38e3a,$e38e3a,$d55557,$f1c71e,$e38e3a,$d55557,$000000,$e38e3a,$d55557
dc $0e38e3,$e38e3a,$d55557,$1c71c7,$e38e3a,$d55557,$2aaaaa,$e38e3a,$d55557,$38e38e,$e38e3a,$d55557
dc $c71c73,$f1c71e,$d55557,$d55557,$f1c71e,$d55557,$e38e3a,$f1c71e,$d55557,$f1c71e,$f1c71e,$d55557
dc $000000,$f1c71e,$d55557,$0e38e3,$f1c71e,$d55557,$1c71c7,$f1c71e,$d55557,$2aaaaa,$f1c71e,$d55557
dc $38e38e,$f1c71e,$d55557,$c71c73,$000000,$d55557,$d55557,$000000,$d55557,$e38e3a,$000000,$d55557
dc $f1c71e,$000000,$d55557,$000000,$000000,$d55557,$0e38e3,$000000,$d55557,$1c71c7,$000000,$d55557
dc $2aaaaa,$000000,$d55557,$38e38e,$000000,$d55557,$c71c73,$0e38e3,$d55557,$d55557,$0e38e3,$d55557
dc $e38e3a,$0e38e3,$d55557,$f1c71e,$0e38e3,$d55557,$000000,$0e38e3,$d55557,$0e38e3,$0e38e3,$d55557
dc $1c71c7,$0e38e3,$d55557,$2aaaaa,$0e38e3,$d55557,$38e38e,$0e38e3,$d55557,$c71c73,$1c71c7,$d55557
dc $d55557,$1c71c7,$d55557,$e38e3a,$1c71c7,$d55557,$f1c71e,$1c71c7,$d55557,$000000,$1c71c7,$d55557
dc $0e38e3,$1c71c7,$d55557,$1c71c7,$1c71c7,$d55557,$2aaaaa,$1c71c7,$d55557,$38e38e,$1c71c7,$d55557
dc $c71c73,$2aaaaa,$d55557,$d55557,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$d55557,$f1c71e,$2aaaaa,$d55557
dc $000000,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$d55557,$2aaaaa,$2aaaaa,$d55557
dc $38e38e,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$d55557,$38e38e,$d55557,$e38e3a,$38e38e,$d55557
dc $f1c71e,$38e38e,$d55557,$000000,$38e38e,$d55557,$0e38e3,$38e38e,$d55557,$1c71c7,$38e38e,$d55557
dc $2aaaaa,$38e38e,$d55557,$38e38e,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$d55557,$c71c73,$e38e3a
dc $e38e3a,$c71c73,$e38e3a,$f1c71e,$c71c73,$e38e3a,$000000,$c71c73,$e38e3a,$0e38e3,$c71c73,$e38e3a
dc $1c71c7,$c71c73,$e38e3a,$2aaaaa,$c71c73,$e38e3a,$38e38e,$c71c73,$e38e3a,$c71c73,$d55557,$e38e3a
dc $d55557,$d55557,$e38e3a,$e38e3a,$d55557,$e38e3a,$f1c71e,$d55557,$e38e3a,$000000,$d55557,$e38e3a
dc $0e38e3,$d55557,$e38e3a,$1c71c7,$d55557,$e38e3a,$2aaaaa,$d55557,$e38e3a,$38e38e,$d55557,$e38e3a
dc $c71c73,$e38e3a,$e38e3a,$d55557,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$f1c71e,$e38e3a,$e38e3a
dc $000000,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$e38e3a,$2aaaaa,$e38e3a,$e38e3a
dc $38e38e,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$d55557,$f1c71e,$e38e3a,$e38e3a,$f1c71e,$e38e3a
dc $f1c71e,$f1c71e,$e38e3a,$000000,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$e38e3a,$1c71c7,$f1c71e,$e38e3a
dc $2aaaaa,$f1c71e,$e38e3a,$38e38e,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$d55557,$000000,$e38e3a
dc $e38e3a,$000000,$e38e3a,$f1c71e,$000000,$e38e3a,$000000,$000000,$e38e3a,$0e38e3,$000000,$e38e3a
dc $1c71c7,$000000,$e38e3a,$2aaaaa,$000000,$e38e3a,$38e38e,$000000,$e38e3a,$c71c73,$0e38e3,$e38e3a
dc $d55557,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$000000,$0e38e3,$e38e3a
dc $0e38e3,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$e38e3a,$38e38e,$0e38e3,$e38e3a
dc $c71c73,$1c71c7,$e38e3a,$d55557,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$f1c71e,$1c71c7,$e38e3a
dc $000000,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$e38e3a,$2aaaaa,$1c71c7,$e38e3a
dc $38e38e,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$e38e3a,$e38e3a,$2aaaaa,$e38e3a
dc $f1c71e,$2aaaaa,$e38e3a,$000000,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$e38e3a,$1c71c7,$2aaaaa,$e38e3a
dc $2aaaaa,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$d55557,$38e38e,$e38e3a
dc $e38e3a,$38e38e,$e38e3a,$f1c71e,$38e38e,$e38e3a,$000000,$38e38e,$e38e3a,$0e38e3,$38e38e,$e38e3a
dc $1c71c7,$38e38e,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$38e38e,$38e38e,$e38e3a,$c71c73,$c71c73,$f1c71e
dc $d55557,$c71c73,$f1c71e,$e38e3a,$c71c73,$f1c71e,$f1c71e,$c71c73,$f1c71e,$000000,$c71c73,$f1c71e
dc $0e38e3,$c71c73,$f1c71e,$1c71c7,$c71c73,$f1c71e,$2aaaaa,$c71c73,$f1c71e,$38e38e,$c71c73,$f1c71e
dc $c71c73,$d55557,$f1c71e,$d55557,$d55557,$f1c71e,$e38e3a,$d55557,$f1c71e,$f1c71e,$d55557,$f1c71e
dc $000000,$d55557,$f1c71e,$0e38e3,$d55557,$f1c71e,$1c71c7,$d55557,$f1c71e,$2aaaaa,$d55557,$f1c71e
dc $38e38e,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$d55557,$e38e3a,$f1c71e,$e38e3a,$e38e3a,$f1c71e
dc $f1c71e,$e38e3a,$f1c71e,$000000,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$f1c71e,$1c71c7,$e38e3a,$f1c71e
dc $2aaaaa,$e38e3a,$f1c71e,$38e38e,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$d55557,$f1c71e,$f1c71e
dc $e38e3a,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$000000,$f1c71e,$f1c71e,$0e38e3,$f1c71e,$f1c71e
dc $1c71c7,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$38e38e,$f1c71e,$f1c71e,$c71c73,$000000,$f1c71e
dc $d55557,$000000,$f1c71e,$e38e3a,$000000,$f1c71e,$f1c71e,$000000,$f1c71e,$000000,$000000,$f1c71e
dc $0e38e3,$000000,$f1c71e,$1c71c7,$000000,$f1c71e,$2aaaaa,$000000,$f1c71e,$38e38e,$000000,$f1c71e
dc $c71c73,$0e38e3,$f1c71e,$d55557,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$f1c71e,$0e38e3,$f1c71e
dc $000000,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$f1c71e,$2aaaaa,$0e38e3,$f1c71e
dc $38e38e,$0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$d55557,$1c71c7,$f1c71e,$e38e3a,$1c71c7,$f1c71e
dc $f1c71e,$1c71c7,$f1c71e,$000000,$1c71c7,$f1c71e,$0e38e3,$1c71c7,$f1c71e,$1c71c7,$1c71c7,$f1c71e
dc $2aaaaa,$1c71c7,$f1c71e,$38e38e,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$d55557,$2aaaaa,$f1c71e
dc $e38e3a,$2aaaaa,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$000000,$2aaaaa,$f1c71e,$0e38e3,$2aaaaa,$f1c71e
dc $1c71c7,$2aaaaa,$f1c71e,$2aaaaa,$2aaaaa,$f1c71e,$38e38e,$2aaaaa,$f1c71e,$c71c73,$38e38e,$f1c71e
dc $d55557,$38e38e,$f1c71e,$e38e3a,$38e38e,$f1c71e,$f1c71e,$38e38e,$f1c71e,$000000,$38e38e,$f1c71e
dc $0e38e3,$38e38e,$f1c71e,$1c71c7,$38e38e,$f1c71e,$2aaaaa,$38e38e,$f1c71e,$38e38e,$38e38e,$f1c71e
dc $c71c73,$c71c73,$000000,$d55557,$c71c73,$000000,$e38e3a,$c71c73,$000000,$f1c71e,$c71c73,$000000
dc $000000,$c71c73,$000000,$0e38e3,$c71c73,$000000,$1c71c7,$c71c73,$000000,$2aaaaa,$c71c73,$000000
dc $38e38e,$c71c73,$000000,$c71c73,$d55557,$000000,$d55557,$d55557,$000000,$e38e3a,$d55557,$000000
dc $f1c71e,$d55557,$000000,$000000,$d55557,$000000,$0e38e3,$d55557,$000000,$1c71c7,$d55557,$000000
dc $2aaaaa,$d55557,$000000,$38e38e,$d55557,$000000,$c71c73,$e38e3a,$000000,$d55557,$e38e3a,$000000
dc $e38e3a,$e38e3a,$000000,$f1c71e,$e38e3a,$000000,$000000,$e38e3a,$000000,$0e38e3,$e38e3a,$000000
dc $1c71c7,$e38e3a,$000000,$2aaaaa,$e38e3a,$000000,$38e38e,$e38e3a,$000000,$c71c73,$f1c71e,$000000
dc $d55557,$f1c71e,$000000,$e38e3a,$f1c71e,$000000,$f1c71e,$f1c71e,$000000,$000000,$f1c71e,$000000
dc $0e38e3,$f1c71e,$000000,$1c71c7,$f1c71e,$000000,$2aaaaa,$f1c71e,$000000,$38e38e,$f1c71e,$000000
dc $c71c73,$000000,$000000,$d55557,$000000,$000000,$e38e3a,$000000,$000000,$f1c71e,$000000,$000000
dc $000000,$000000,$000000,$0e38e3,$000000,$000000,$1c71c7,$000000,$000000,$2aaaaa,$000000,$000000
dc $38e38e,$000000,$000000,$c71c73,$0e38e3,$000000,$d55557,$0e38e3,$000000,$e38e3a,$0e38e3,$000000
dc $f1c71e,$0e38e3,$000000,$000000,$0e38e3,$000000,$0e38e3,$0e38e3,$000000,$1c71c7,$0e38e3,$000000
dc $2aaaaa,$0e38e3,$000000,$38e38e,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$d55557,$1c71c7,$000000
dc $e38e3a,$1c71c7,$000000,$f1c71e,$1c71c7,$000000,$000000,$1c71c7,$000000,$0e38e3,$1c71c7,$000000
dc $1c71c7,$1c71c7,$000000,$2aaaaa,$1c71c7,$000000,$38e38e,$1c71c7,$000000,$c71c73,$2aaaaa,$000000
dc $d55557,$2aaaaa,$000000,$e38e3a,$2aaaaa,$000000,$f1c71e,$2aaaaa,$000000,$000000,$2aaaaa,$000000
dc $0e38e3,$2aaaaa,$000000,$1c71c7,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$000000,$38e38e,$2aaaaa,$000000
dc $c71c73,$38e38e,$000000,$d55557,$38e38e,$000000,$e38e3a,$38e38e,$000000,$f1c71e,$38e38e,$000000
dc $000000,$38e38e,$000000,$0e38e3,$38e38e,$000000,$1c71c7,$38e38e,$000000,$2aaaaa,$38e38e,$000000
dc $38e38e,$38e38e,$000000,$c71c73,$c71c73,$0e38e3,$d55557,$c71c73,$0e38e3,$e38e3a,$c71c73,$0e38e3
dc $f1c71e,$c71c73,$0e38e3,$000000,$c71c73,$0e38e3,$0e38e3,$c71c73,$0e38e3,$1c71c7,$c71c73,$0e38e3
dc $2aaaaa,$c71c73,$0e38e3,$38e38e,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$d55557,$d55557,$0e38e3
dc $e38e3a,$d55557,$0e38e3,$f1c71e,$d55557,$0e38e3,$000000,$d55557,$0e38e3,$0e38e3,$d55557,$0e38e3
dc $1c71c7,$d55557,$0e38e3,$2aaaaa,$d55557,$0e38e3,$38e38e,$d55557,$0e38e3,$c71c73,$e38e3a,$0e38e3
dc $d55557,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$000000,$e38e3a,$0e38e3
dc $0e38e3,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$0e38e3,$2aaaaa,$e38e3a,$0e38e3,$38e38e,$e38e3a,$0e38e3
dc $c71c73,$f1c71e,$0e38e3,$d55557,$f1c71e,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$f1c71e,$f1c71e,$0e38e3
dc $000000,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$0e38e3,$1c71c7,$f1c71e,$0e38e3,$2aaaaa,$f1c71e,$0e38e3
dc $38e38e,$f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$d55557,$000000,$0e38e3,$e38e3a,$000000,$0e38e3
dc $f1c71e,$000000,$0e38e3,$000000,$000000,$0e38e3,$0e38e3,$000000,$0e38e3,$1c71c7,$000000,$0e38e3
dc $2aaaaa,$000000,$0e38e3,$38e38e,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$d55557,$0e38e3,$0e38e3
dc $e38e3a,$0e38e3,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$000000,$0e38e3,$0e38e3,$0e38e3,$0e38e3,$0e38e3
dc $1c71c7,$0e38e3,$0e38e3,$2aaaaa,$0e38e3,$0e38e3,$38e38e,$0e38e3,$0e38e3,$c71c73,$1c71c7,$0e38e3
dc $d55557,$1c71c7,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$000000,$1c71c7,$0e38e3
dc $0e38e3,$1c71c7,$0e38e3,$1c71c7,$1c71c7,$0e38e3,$2aaaaa,$1c71c7,$0e38e3,$38e38e,$1c71c7,$0e38e3
dc $c71c73,$2aaaaa,$0e38e3,$d55557,$2aaaaa,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$f1c71e,$2aaaaa,$0e38e3
dc $000000,$2aaaaa,$0e38e3,$0e38e3,$2aaaaa,$0e38e3,$1c71c7,$2aaaaa,$0e38e3,$2aaaaa,$2aaaaa,$0e38e3
dc $38e38e,$2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$d55557,$38e38e,$0e38e3,$e38e3a,$38e38e,$0e38e3
dc $f1c71e,$38e38e,$0e38e3,$000000,$38e38e,$0e38e3,$0e38e3,$38e38e,$0e38e3,$1c71c7,$38e38e,$0e38e3
dc $2aaaaa,$38e38e,$0e38e3,$38e38e,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$d55557,$c71c73,$1c71c7
dc $e38e3a,$c71c73,$1c71c7,$f1c71e,$c71c73,$1c71c7,$000000,$c71c73,$1c71c7,$0e38e3,$c71c73,$1c71c7
dc $1c71c7,$c71c73,$1c71c7,$2aaaaa,$c71c73,$1c71c7,$38e38e,$c71c73,$1c71c7,$c71c73,$d55557,$1c71c7
dc $d55557,$d55557,$1c71c7,$e38e3a,$d55557,$1c71c7,$f1c71e,$d55557,$1c71c7,$000000,$d55557,$1c71c7
dc $0e38e3,$d55557,$1c71c7,$1c71c7,$d55557,$1c71c7,$2aaaaa,$d55557,$1c71c7,$38e38e,$d55557,$1c71c7
dc $c71c73,$e38e3a,$1c71c7,$d55557,$e38e3a,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$f1c71e,$e38e3a,$1c71c7
dc $000000,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$1c71c7,$1c71c7,$e38e3a,$1c71c7,$2aaaaa,$e38e3a,$1c71c7
dc $38e38e,$e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$d55557,$f1c71e,$1c71c7,$e38e3a,$f1c71e,$1c71c7
dc $f1c71e,$f1c71e,$1c71c7,$000000,$f1c71e,$1c71c7,$0e38e3,$f1c71e,$1c71c7,$1c71c7,$f1c71e,$1c71c7
dc $2aaaaa,$f1c71e,$1c71c7,$38e38e,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$d55557,$000000,$1c71c7
dc $e38e3a,$000000,$1c71c7,$f1c71e,$000000,$1c71c7,$000000,$000000,$1c71c7,$0e38e3,$000000,$1c71c7
dc $1c71c7,$000000,$1c71c7,$2aaaaa,$000000,$1c71c7,$38e38e,$000000,$1c71c7,$c71c73,$0e38e3,$1c71c7
dc $d55557,$0e38e3,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$f1c71e,$0e38e3,$1c71c7,$000000,$0e38e3,$1c71c7
dc $0e38e3,$0e38e3,$1c71c7,$1c71c7,$0e38e3,$1c71c7,$2aaaaa,$0e38e3,$1c71c7,$38e38e,$0e38e3,$1c71c7
dc $c71c73,$1c71c7,$1c71c7,$d55557,$1c71c7,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$f1c71e,$1c71c7,$1c71c7
dc $000000,$1c71c7,$1c71c7,$0e38e3,$1c71c7,$1c71c7,$1c71c7,$1c71c7,$1c71c7,$2aaaaa,$1c71c7,$1c71c7
dc $38e38e,$1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$d55557,$2aaaaa,$1c71c7,$e38e3a,$2aaaaa,$1c71c7
dc $f1c71e,$2aaaaa,$1c71c7,$000000,$2aaaaa,$1c71c7,$0e38e3,$2aaaaa,$1c71c7,$1c71c7,$2aaaaa,$1c71c7
dc $2aaaaa,$2aaaaa,$1c71c7,$38e38e,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$d55557,$38e38e,$1c71c7
dc $e38e3a,$38e38e,$1c71c7,$f1c71e,$38e38e,$1c71c7,$000000,$38e38e,$1c71c7,$0e38e3,$38e38e,$1c71c7
dc $1c71c7,$38e38e,$1c71c7,$2aaaaa,$38e38e,$1c71c7,$38e38e,$38e38e,$1c71c7,$c71c73,$c71c73,$2aaaaa
dc $d55557,$c71c73,$2aaaaa,$e38e3a,$c71c73,$2aaaaa,$f1c71e,$c71c73,$2aaaaa,$000000,$c71c73,$2aaaaa
dc $0e38e3,$c71c73,$2aaaaa,$1c71c7,$c71c73,$2aaaaa,$2aaaaa,$c71c73,$2aaaaa,$38e38e,$c71c73,$2aaaaa
dc $c71c73,$d55557,$2aaaaa,$d55557,$d55557,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$f1c71e,$d55557,$2aaaaa
dc $000000,$d55557,$2aaaaa,$0e38e3,$d55557,$2aaaaa,$1c71c7,$d55557,$2aaaaa,$2aaaaa,$d55557,$2aaaaa
dc $38e38e,$d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$e38e3a,$e38e3a,$2aaaaa
dc $f1c71e,$e38e3a,$2aaaaa,$000000,$e38e3a,$2aaaaa,$0e38e3,$e38e3a,$2aaaaa,$1c71c7,$e38e3a,$2aaaaa
dc $2aaaaa,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$d55557,$f1c71e,$2aaaaa
dc $e38e3a,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$2aaaaa,$000000,$f1c71e,$2aaaaa,$0e38e3,$f1c71e,$2aaaaa
dc $1c71c7,$f1c71e,$2aaaaa,$2aaaaa,$f1c71e,$2aaaaa,$38e38e,$f1c71e,$2aaaaa,$c71c73,$000000,$2aaaaa
dc $d55557,$000000,$2aaaaa,$e38e3a,$000000,$2aaaaa,$f1c71e,$000000,$2aaaaa,$000000,$000000,$2aaaaa
dc $0e38e3,$000000,$2aaaaa,$1c71c7,$000000,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$38e38e,$000000,$2aaaaa
dc $c71c73,$0e38e3,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$f1c71e,$0e38e3,$2aaaaa
dc $000000,$0e38e3,$2aaaaa,$0e38e3,$0e38e3,$2aaaaa,$1c71c7,$0e38e3,$2aaaaa,$2aaaaa,$0e38e3,$2aaaaa
dc $38e38e,$0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$e38e3a,$1c71c7,$2aaaaa
dc $f1c71e,$1c71c7,$2aaaaa,$000000,$1c71c7,$2aaaaa,$0e38e3,$1c71c7,$2aaaaa,$1c71c7,$1c71c7,$2aaaaa
dc $2aaaaa,$1c71c7,$2aaaaa,$38e38e,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$d55557,$2aaaaa,$2aaaaa
dc $e38e3a,$2aaaaa,$2aaaaa,$f1c71e,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$0e38e3,$2aaaaa,$2aaaaa
dc $1c71c7,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$38e38e,$2aaaaa,$2aaaaa,$c71c73,$38e38e,$2aaaaa
dc $d55557,$38e38e,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$f1c71e,$38e38e,$2aaaaa,$000000,$38e38e,$2aaaaa
dc $0e38e3,$38e38e,$2aaaaa,$1c71c7,$38e38e,$2aaaaa,$2aaaaa,$38e38e,$2aaaaa,$38e38e,$38e38e,$2aaaaa
dc $c71c73,$c71c73,$38e38e,$d55557,$c71c73,$38e38e,$e38e3a,$c71c73,$38e38e,$f1c71e,$c71c73,$38e38e
dc $000000,$c71c73,$38e38e,$0e38e3,$c71c73,$38e38e,$1c71c7,$c71c73,$38e38e,$2aaaaa,$c71c73,$38e38e
dc $38e38e,$c71c73,$38e38e,$c71c73,$d55557,$38e38e,$d55557,$d55557,$38e38e,$e38e3a,$d55557,$38e38e
dc $f1c71e,$d55557,$38e38e,$000000,$d55557,$38e38e,$0e38e3,$d55557,$38e38e,$1c71c7,$d55557,$38e38e
dc $2aaaaa,$d55557,$38e38e,$38e38e,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$d55557,$e38e3a,$38e38e
dc $e38e3a,$e38e3a,$38e38e,$f1c71e,$e38e3a,$38e38e,$000000,$e38e3a,$38e38e,$0e38e3,$e38e3a,$38e38e
dc $1c71c7,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$38e38e,$38e38e,$e38e3a,$38e38e,$c71c73,$f1c71e,$38e38e
dc $d55557,$f1c71e,$38e38e,$e38e3a,$f1c71e,$38e38e,$f1c71e,$f1c71e,$38e38e,$000000,$f1c71e,$38e38e
dc $0e38e3,$f1c71e,$38e38e,$1c71c7,$f1c71e,$38e38e,$2aaaaa,$f1c71e,$38e38e,$38e38e,$f1c71e,$38e38e
dc $c71c73,$000000,$38e38e,$d55557,$000000,$38e38e,$e38e3a,$000000,$38e38e,$f1c71e,$000000,$38e38e
dc $000000,$000000,$38e38e,$0e38e3,$000000,$38e38e,$1c71c7,$000000,$38e38e,$2aaaaa,$000000,$38e38e
dc $38e38e,$000000,$38e38e,$c71c73,$0e38e3,$38e38e,$d55557,$0e38e3,$38e38e,$e38e3a,$0e38e3,$38e38e
dc $f1c71e,$0e38e3,$38e38e,$000000,$0e38e3,$38e38e,$0e38e3,$0e38e3,$38e38e,$1c71c7,$0e38e3,$38e38e
dc $2aaaaa,$0e38e3,$38e38e,$38e38e,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$d55557,$1c71c7,$38e38e
dc $e38e3a,$1c71c7,$38e38e,$f1c71e,$1c71c7,$38e38e,$000000,$1c71c7,$38e38e,$0e38e3,$1c71c7,$38e38e
dc $1c71c7,$1c71c7,$38e38e,$2aaaaa,$1c71c7,$38e38e,$38e38e,$1c71c7,$38e38e,$c71c73,$2aaaaa,$38e38e
dc $d55557,$2aaaaa,$38e38e,$e38e3a,$2aaaaa,$38e38e,$f1c71e,$2aaaaa,$38e38e,$000000,$2aaaaa,$38e38e
dc $0e38e3,$2aaaaa,$38e38e,$1c71c7,$2aaaaa,$38e38e,$2aaaaa,$2aaaaa,$38e38e,$38e38e,$2aaaaa,$38e38e
dc $c71c73,$38e38e,$38e38e,$d55557,$38e38e,$38e38e,$e38e3a,$38e38e,$38e38e,$f1c71e,$38e38e,$38e38e
dc $000000,$38e38e,$38e38e,$0e38e3,$38e38e,$38e38e,$1c71c7,$38e38e,$38e38e,$2aaaaa,$38e38e,$38e38e
dc $38e38e,$38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$c71c73
dc $f1c71e,$c71c73,$c71c73,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$c71c73
dc $2aaaaa,$c71c73,$c71c73,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$d55557,$d55557,$c71c73
dc $e38e3a,$d55557,$c71c73,$f1c71e,$d55557,$c71c73,$000000,$d55557,$c71c73,$0e38e3,$d55557,$c71c73
dc $1c71c7,$d55557,$c71c73,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73
dc $d55557,$e38e3a,$c71c73,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$c71c73
dc $0e38e3,$e38e3a,$c71c73,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$c71c73
dc $c71c73,$f1c71e,$c71c73,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$c71c73
dc $000000,$f1c71e,$c71c73,$0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$c71c73
dc $38e38e,$f1c71e,$c71c73,$c71c73,$000000,$c71c73,$d55557,$000000,$c71c73,$e38e3a,$000000,$c71c73
dc $f1c71e,$000000,$c71c73,$000000,$000000,$c71c73,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$c71c73
dc $2aaaaa,$000000,$c71c73,$38e38e,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$c71c73
dc $e38e3a,$0e38e3,$c71c73,$f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$c71c73
dc $1c71c7,$0e38e3,$c71c73,$2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73
dc $d55557,$1c71c7,$c71c73,$e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$c71c73
dc $0e38e3,$1c71c7,$c71c73,$1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$c71c73
dc $c71c73,$2aaaaa,$c71c73,$d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$c71c73
dc $000000,$2aaaaa,$c71c73,$0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$c71c73
dc $38e38e,$2aaaaa,$c71c73,$c71c73,$38e38e,$c71c73,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$c71c73
dc $f1c71e,$38e38e,$c71c73,$000000,$38e38e,$c71c73,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$c71c73
dc $2aaaaa,$38e38e,$c71c73,$38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$d55557,$c71c73,$d55557
dc $e38e3a,$c71c73,$d55557,$f1c71e,$c71c73,$d55557,$000000,$c71c73,$d55557,$0e38e3,$c71c73,$d55557
dc $1c71c7,$c71c73,$d55557,$2aaaaa,$c71c73,$d55557,$38e38e,$c71c73,$d55557,$c71c73,$d55557,$d55557
dc $d55557,$d55557,$d55557,$e38e3a,$d55557,$d55557,$f1c71e,$d55557,$d55557,$000000,$d55557,$d55557
dc $0e38e3,$d55557,$d55557,$1c71c7,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$38e38e,$d55557,$d55557
dc $c71c73,$e38e3a,$d55557,$d55557,$e38e3a,$d55557,$e38e3a,$e38e3a,$d55557,$f1c71e,$e38e3a,$d55557
dc $000000,$e38e3a,$d55557,$0e38e3,$e38e3a,$d55557,$1c71c7,$e38e3a,$d55557,$2aaaaa,$e38e3a,$d55557
dc $38e38e,$e38e3a,$d55557,$c71c73,$f1c71e,$d55557,$d55557,$f1c71e,$d55557,$e38e3a,$f1c71e,$d55557
dc $f1c71e,$f1c71e,$d55557,$000000,$f1c71e,$d55557,$0e38e3,$f1c71e,$d55557,$1c71c7,$f1c71e,$d55557
dc $2aaaaa,$f1c71e,$d55557,$38e38e,$f1c71e,$d55557,$c71c73,$000000,$d55557,$d55557,$000000,$d55557
dc $e38e3a,$000000,$d55557,$f1c71e,$000000,$d55557,$000000,$000000,$d55557,$0e38e3,$000000,$d55557
dc $1c71c7,$000000,$d55557,$2aaaaa,$000000,$d55557,$38e38e,$000000,$d55557,$c71c73,$0e38e3,$d55557
dc $d55557,$0e38e3,$d55557,$e38e3a,$0e38e3,$d55557,$f1c71e,$0e38e3,$d55557,$000000,$0e38e3,$d55557
dc $0e38e3,$0e38e3,$d55557,$1c71c7,$0e38e3,$d55557,$2aaaaa,$0e38e3,$d55557,$38e38e,$0e38e3,$d55557
dc $c71c73,$1c71c7,$d55557,$d55557,$1c71c7,$d55557,$e38e3a,$1c71c7,$d55557,$f1c71e,$1c71c7,$d55557
dc $000000,$1c71c7,$d55557,$0e38e3,$1c71c7,$d55557,$1c71c7,$1c71c7,$d55557,$2aaaaa,$1c71c7,$d55557
dc $38e38e,$1c71c7,$d55557,$c71c73,$2aaaaa,$d55557,$d55557,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$d55557
dc $f1c71e,$2aaaaa,$d55557,$000000,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$d55557
dc $2aaaaa,$2aaaaa,$d55557,$38e38e,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$d55557,$38e38e,$d55557
dc $e38e3a,$38e38e,$d55557,$f1c71e,$38e38e,$d55557,$000000,$38e38e,$d55557,$0e38e3,$38e38e,$d55557
dc $1c71c7,$38e38e,$d55557,$2aaaaa,$38e38e,$d55557,$38e38e,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a
dc $d55557,$c71c73,$e38e3a,$e38e3a,$c71c73,$e38e3a,$f1c71e,$c71c73,$e38e3a,$000000,$c71c73,$e38e3a
dc $0e38e3,$c71c73,$e38e3a,$1c71c7,$c71c73,$e38e3a,$2aaaaa,$c71c73,$e38e3a,$38e38e,$c71c73,$e38e3a
dc $c71c73,$d55557,$e38e3a,$d55557,$d55557,$e38e3a,$e38e3a,$d55557,$e38e3a,$f1c71e,$d55557,$e38e3a
dc $000000,$d55557,$e38e3a,$0e38e3,$d55557,$e38e3a,$1c71c7,$d55557,$e38e3a,$2aaaaa,$d55557,$e38e3a
dc $38e38e,$d55557,$e38e3a,$c71c73,$e38e3a,$e38e3a,$d55557,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$e38e3a
dc $f1c71e,$e38e3a,$e38e3a,$000000,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$e38e3a
dc $2aaaaa,$e38e3a,$e38e3a,$38e38e,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$d55557,$f1c71e,$e38e3a
dc $e38e3a,$f1c71e,$e38e3a,$f1c71e,$f1c71e,$e38e3a,$000000,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$e38e3a
dc $1c71c7,$f1c71e,$e38e3a,$2aaaaa,$f1c71e,$e38e3a,$38e38e,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a
dc $d55557,$000000,$e38e3a,$e38e3a,$000000,$e38e3a,$f1c71e,$000000,$e38e3a,$000000,$000000,$e38e3a
dc $0e38e3,$000000,$e38e3a,$1c71c7,$000000,$e38e3a,$2aaaaa,$000000,$e38e3a,$38e38e,$000000,$e38e3a
dc $c71c73,$0e38e3,$e38e3a,$d55557,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$e38e3a
dc $000000,$0e38e3,$e38e3a,$0e38e3,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$e38e3a
dc $38e38e,$0e38e3,$e38e3a,$c71c73,$1c71c7,$e38e3a,$d55557,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$e38e3a
dc $f1c71e,$1c71c7,$e38e3a,$000000,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$e38e3a
dc $2aaaaa,$1c71c7,$e38e3a,$38e38e,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$e38e3a
dc $e38e3a,$2aaaaa,$e38e3a,$f1c71e,$2aaaaa,$e38e3a,$000000,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$e38e3a
dc $1c71c7,$2aaaaa,$e38e3a,$2aaaaa,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a
dc $d55557,$38e38e,$e38e3a,$e38e3a,$38e38e,$e38e3a,$f1c71e,$38e38e,$e38e3a,$000000,$38e38e,$e38e3a
dc $0e38e3,$38e38e,$e38e3a,$1c71c7,$38e38e,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$38e38e,$38e38e,$e38e3a
dc $c71c73,$c71c73,$f1c71e,$d55557,$c71c73,$f1c71e,$e38e3a,$c71c73,$f1c71e,$f1c71e,$c71c73,$f1c71e
dc $000000,$c71c73,$f1c71e,$0e38e3,$c71c73,$f1c71e,$1c71c7,$c71c73,$f1c71e,$2aaaaa,$c71c73,$f1c71e
dc $38e38e,$c71c73,$f1c71e,$c71c73,$d55557,$f1c71e,$d55557,$d55557,$f1c71e,$e38e3a,$d55557,$f1c71e
dc $f1c71e,$d55557,$f1c71e,$000000,$d55557,$f1c71e,$0e38e3,$d55557,$f1c71e,$1c71c7,$d55557,$f1c71e
dc $2aaaaa,$d55557,$f1c71e,$38e38e,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$d55557,$e38e3a,$f1c71e
dc $e38e3a,$e38e3a,$f1c71e,$f1c71e,$e38e3a,$f1c71e,$000000,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$f1c71e
dc $1c71c7,$e38e3a,$f1c71e,$2aaaaa,$e38e3a,$f1c71e,$38e38e,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e
dc $d55557,$f1c71e,$f1c71e,$e38e3a,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$000000,$f1c71e,$f1c71e
dc $0e38e3,$f1c71e,$f1c71e,$1c71c7,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$38e38e,$f1c71e,$f1c71e
dc $c71c73,$000000,$f1c71e,$d55557,$000000,$f1c71e,$e38e3a,$000000,$f1c71e,$f1c71e,$000000,$f1c71e
dc $000000,$000000,$f1c71e,$0e38e3,$000000,$f1c71e,$1c71c7,$000000,$f1c71e,$2aaaaa,$000000,$f1c71e
dc $38e38e,$000000,$f1c71e,$c71c73,$0e38e3,$f1c71e,$d55557,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$f1c71e
dc $f1c71e,$0e38e3,$f1c71e,$000000,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$f1c71e
;; Sampling tables
table_quantizations_01
dc 00,00,01,03,04,05,06,07,08,09,10,11,12,13,14,15
dc 00,00,01,03,04,05,06,07,08,09,10,11,12,13,14,15
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
dc 00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
table_quantizations_23
dc 00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
dc 00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
dc 00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
dc 00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
;; A combination of the x, d and c tables. The `m' stands
;; for the multiplicator using 1.0/x. NOTE: Table c is
;; subtracted by 1.0.
table_xmdc
dc $000001,$100000,$200000,$2aaaab
dc $000003,$080000,$200000,$4ccccd
dc $000003,$080000,$100000,$124925
dc $000007,$040000,$200000,$638e39
dc $000007,$040000,$080000,$088889
dc $00000f,$020000,$040000,$042108
dc $00001f,$010000,$020000,$020821
dc $00003f,$008000,$010000,$010204
dc $00007f,$004000,$008000,$008081
dc $0000ff,$002000,$004000,$004020
dc $0001ff,$001000,$002000,$002008
dc $0003ff,$000800,$001000,$001002
dc $0007ff,$000400,$000800,$000801
dc $000fff,$000200,$000400,$000400
dc $001fff,$000100,$000200,$000200
dc $003fff,$000080,$000100,$000100
dc $007fff,$000040,$000080,$000080
;; The `multiply' table used in the last step of sample
;; requantization. NOTE: All values are divided by two.
table_multiple
dc $7fffff,$6597fb,$50a28c,$400000
dc $32cbfd,$285146,$200000,$1965ff
dc $1428a3,$100000,$0cb2ff,$0a1451
dc $080000,$065980,$050a29,$040000
dc $032cc0,$028514,$020000,$019660
dc $01428a,$010000,$00cb30,$00a145
dc $008000,$006598,$0050a3,$004000
dc $0032cc,$002851,$002000,$001966
dc $001429,$001000,$000cb3,$000a14
dc $000800,$000659,$00050a,$000400
dc $00032d,$000285,$000200,$000196
dc $000143,$000100,$0000cb,$0000a1
dc $000080,$000066,$000051,$000040
dc $000033,$000028,$000020,$000019
dc $000014,$000010,$00000d,$00000a
dc $000008,$000006,$000005,$000000
table_bits
dc 5,7,3,10,4,5,6,7,8,9
dc 10,11,12,13,14,15,16
table_translate_quantizations
dc table_quantizations_23
dc table_quantizations_23
dc table_quantizations_01
dc table_quantizations_01
table_translate_sblimit
dc 27,30,8,12
table_translate_alloc
dc alloc0_bits0
dc alloc1_bits0
dc alloc2_bits0
dc alloc3_bits0
alloc0_bits0 ;sblimit=27
alloc1_bits0 ;sblimit=30
dc 4,4,4,4,4,4,4,4,4,4,4 ; 11
dc 3,3,3,3,3,3,3,3,3,3,3,3 ;+12
dc 2,2,2,2 ;+04 = 27
dc 2,2,2 ;+03 = 30
alloc2_bits0 ;sblimit=08
alloc3_bits0 ;sblimit=12
dc 4,4 ; 02
dc 3,3,3,3,3,3 ;+06 = 08
dc 3,3,3,3 ;+04 = 12